package IO;

import javax.naming.ldap.PagedResultsControl;
import javax.swing.text.DefaultEditorKit;
import java.io.File;

/**
 * 面向对象操作;统计文件夹大小。打印文件
 */
public class DirCount {

    private long len;
    private int FileSize;       // 文件个数
    private int DirSize = -1;   // 文件夹个数
    private String path;
    private File f;

    // 对象构造器
    public DirCount(String path) {
        this.path = path;
        this.f = new File(path);    // 文件对象
        FileCount(this.f);          // 调用函数
        PrintFileName(this.f, 0);
    }

    public static void main(String[] args) {
        // DirCount 对象
        DirCount d = new DirCount("E:/Code/Java练习/IO/src/IO/Dir");
        System.out.println("文件大小(字节)：" + d.getLen());
        System.out.println("文件夹个数：" + d.getDirSize());
        System.out.println("文件个数：" + d.getFileSize());
    }

    // 统计文件夹大小
    private void FileCount(File f) {
        if (f != null && f.exists()) {
            if (f.isFile()) {
                len += f.length();
                this.FileSize++;        //统计自身
            } else {
                this.DirSize++;
                for (File s : f.listFiles()) {
                    FileCount(s);
                }
            }
        }
    }

    private void PrintFileName(File f, int deep) {
        System.out.println(f.getName() + "---" + deep);
        if (f == null || !f.exists()) {
            return;
        } else if (f.isDirectory()) {
            for (File F : f.listFiles()) {
                PrintFileName(F, deep + 1);
            }
        }
    }

    public long getLen() {
        return len;
    }

    public int getFileSize() {
        return FileSize;
    }

    public int getDirSize() {
        return DirSize;
    }
}
